/*
@Author   : Uyynot
@Email    : uyynot@qq.com
@Time     : 2023/8/16 9:20
@File     : config.go
@Project  : web_scaff
@Desc     :
*/
package configs

import (
	"fmt"

	"github.com/fsnotify/fsnotify"

	"github.com/spf13/viper"
)

var Conf = new(Config)

type Config struct {
	Server Server `json:"server"`
	Mysql  Mysql  `json:"mysql"`
	Redis  Redis  `json:"redis"`
	Jwt    Jwt    `json:"jwt"`
	Logger Logger `json:"logger"`
	Aes    Aes    `json:"aes"`
}

func init() {
	//设置配置文件路径
	viper.SetConfigFile("configs/config.yaml")
	//读取配置
	if err := viper.ReadInConfig(); err != nil {
		panic(fmt.Errorf("读取配置文件失败：%s", err))
	}
	//将配置文件内容解组到config
	if err := viper.Unmarshal(Conf); err != nil {
		panic(fmt.Errorf("解组配置失败：%s", err))
	}
	//监控配置文件变化
	viper.WatchConfig()
	//如果配置文件发生变化则重写解组到config
	viper.OnConfigChange(func(in fsnotify.Event) {
		fmt.Println("配置文件被修改……")
		if err := viper.Unmarshal(Conf); err != nil {
			panic(fmt.Errorf("配置文件修改后解组失败：%s", err))
		}
	})
}
